Computer systems employ main memory, or RAM (random access memory) for access during program (application) execution, and disk memory (mass storage), typically for saving/retrieving whole programs and writing data files needing storage beyond the current execution. Often these types are labeled as volatile and non-volatile storage, referring to the need for constant power to preserve stored values in main memory, while disk memory is employed for persistent storage of programs and data. Access methods to each of these types also differ fundamentally, as volatile memory is accessed by program instructions while disk memory relies on the input/output (I/O) subsystem of the computer. While the volatile memory is generally faster, such memory is referenced as a single block of homogeneous memory locations, such that a memory controller stores and retrieves from arbitrary available locations of substantially similar operating performance.